package com.junjie.checkin.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 洪浚杰
 * @description
 * @date 2025/6/11 19:30
 */
public class DateTimeFormat {
    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat(DATE_TIME_PATTERN);

    /**
     * 将日期字符串转换为 Date 对象
     * @param dateStr 日期字符串 (格式: yyyy-MM-dd HH:mm:ss)
     * @return Date 对象
     * @throws ParseException 如果字符串格式不匹配
     */
    public static Date stringToDate(String dateStr) throws ParseException, ParseException {
        synchronized (DATE_TIME_FORMAT) {
            return DATE_TIME_FORMAT.parse(dateStr);
        }
    }

    /**
     * 将 Date 对象转换为日期字符串
     * @param date Date 对象
     * @return 日期字符串 (格式: yyyy-MM-dd HH:mm:ss)
     */
    public static String dateToString(Date date) {
        synchronized (DATE_TIME_FORMAT) {
            return DATE_TIME_FORMAT.format(date);
        }
    }

    /**
     * 获取当前时间的日期字符串
     * @return 当前时间的字符串表示 (格式: yyyy-MM-dd HH:mm:ss)
     */
    public static String getCurrentDateTimeString() {
        return dateToString(new Date());
    }

    /**
     * 检查时间范围是否有效
     * @param startDateStr 开始时间字符串
     * @param endDateStr   结束时间字符串
     * @return true:有效,false:无效
     */
    public static boolean isCurrentTimeInInterval(String startDateStr, String endDateStr) {
        try {
            Date startDate = DateTimeFormat.stringToDate(startDateStr);
            Date endDate = DateTimeFormat.stringToDate(endDateStr);
            Date now = new Date();

            return now.after(startDate) && now.before(endDate);
        } catch (ParseException e) {
            // 处理日期解析异常
            throw new IllegalArgumentException("时间格式不正确，应为 yyyy-MM-dd HH:mm:ss", e);
        }
    }

    /**
     * 检查时间范围是否有效
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return true:有效,false:无效
     */
    public static boolean isCurrentTimeInInterval(Date startDate, Date endDate) {
        Date now = new Date();
        return now.after(startDate) && now.before(endDate);
    }
}
